let a = undefined;
a = 1;
a = '2';
// console.log(a);

//  函数名   函数参数类型  函数返回值类型
//  如果返回多种类型    :any
function sayName(name:String):any{
    return '1';
}

// void
// 这个类型只能传入 null undefind
let v:void = null;
// console.log(v);

// never
function error(message:string):never{
    return new Error(message);
}
function fail():void{
    return error("Something faild");
}
// console.log(fail());

// never 类型是任何类型的子类型,也可以赋值给任何类型
// 然而  没有类型是nerver的子类型或可以赋值给never类型(除了never本身之外)
// 即使是any也不可以赋值给never
let s:string;
let n:never;

s = "万章";
n = "万章";//报错,never类型的变量不可以接受其他类型的数据

// 不报错, 一个抛出错误的函数就是never类型
n = (()=>{throw new Error('exception')})();
// 不报错, never类型的数据可以赋值给其他类型的变量
s = (()=>{throw new Error('exception')})();




